#include "iuPacketRaw.hpp"
#include <cstdlib>
#include <cstring>

/**
 * @brief Initialise le paquet Raw
 */
iuPacketRaw::iuPacketRaw()
{
   m_len = 0;
   m_data = NULL;
}

/**
 * @brief Detruit le paquet Raw
 */
iuPacketRaw::~iuPacketRaw()
{
   free(m_data);
}

/**
 * @brief Calcule la longueur du paquet Raw. Lorsque fromBuffer() est appelee, le buffer
 * passe en parametre devra avoir au moins cette taille
 * @return Renvoie la longueur du paquet Raw
 */
uint16_t iuPacketRaw::getBufferLen() const
{
   return m_len;
}

/**
 * @brief Lit le paquet Raw a partir d'un buffer
 * @param buffer le buffer ou le paquet Raw sera lu
 * @param len la longueur du paquet Raw a lire
 * @return Renvoie le nombre d'octets lus (ici, len)
 * @note Si des donnees sont deja existantes dans la trame actuelle, elles ne seront pas detruites
 */
uint16_t iuPacketRaw::fromBuffer(const char *buffer, uint16_t len)
{
   m_len = len;
   m_data = (char *)malloc(len);
   memcpy(m_data, buffer, len);

   return len;
}

/**
 * @brief Ecrit le paquet Raw dans le buffer. Le buffer devra avoir une taille d'au
 * moins getBufferLen() octets
 * @param buffer l'adresse du debut du buffer dans lequel sera ecrit le paquet Raw
 * @return Renvoie le nombre d'octets ecrits (== getBufferLen())
 */
uint16_t iuPacketRaw::toBuffer(char *buffer) const
{
   memcpy(buffer, m_data, m_len);
 
   return m_len;
}
